package com.study.jyg.rxjava2study.network.okgo;

import android.text.TextUtils;

import com.lzy.okgo.OkGo;
import com.lzy.okgo.cache.CacheMode;
import com.lzy.okgo.callback.Callback;
import com.lzy.okgo.model.HttpParams;
import com.lzy.okgo.model.Progress;
import com.lzy.okgo.model.Response;
import com.lzy.okgo.request.base.Request;
import com.study.jyg.rxjava2study.api.Urls;

import java.io.File;
import java.util.ArrayList;
import java.util.Map;

public class OkGoUtils {


    /**
     * 一次普通的网络请求可以设置的参数，根据实际情况加减( 头部泛型必须添加)
     */
    private void SendHttpDemo() {
        OkGo.<String>post(Urls.DEMO)
                .tag("")//请求的tag，主要用于取消对应的网络请求
                .isMultipart(true)//强制使用multipart/form-data表单上传
                .isSpliceUrl(true)//强制将params的参数拼接到url后
                .retryCount(3)//超时重连次数
                .cacheKey("cachekey")//缓存key
                .cacheTime(5000)//缓存失效时间
                .cacheMode(CacheMode.DEFAULT)//缓存模式
                .headers("header1", "header1")//请求添加头
                .headers("header2", "header2")//支持多个添加头
                .params("", "")//添加请求参数
                .params("", "")//支持多个请求参数
                .params("", new File(""))//可以添加文件上传
                .params("", new File(""))//可以添加多个文件上传
                .addUrlParams("", new ArrayList<>())//支持一个key传多个参数
                .addFileParams("", new ArrayList<>())//支持一个key传多个文件
                .addFileWrapperParams("", new ArrayList<>())//支持一个key传多个文件
                .execute(new Callback<String>() {//回调
                    @Override
                    public void onStart(Request<String, ? extends Request> request) {
                        //ui线程 请求网络之前调用，可以显示对话框，添加/修改/移除 请求参数
                    }

                    @Override
                    public void onSuccess(Response<String> response) {
                        //ui线程　请求成功
                    }

                    @Override
                    public void onCacheSuccess(Response<String> response) {
                        //ui线程　缓存读取成功的回调
                    }

                    @Override
                    public void onError(Response<String> response) {
                        //ui线程　请求失败回调
                    }

                    @Override
                    public void onFinish() {
                        //ui线程　请求结束无论成功失败
                    }

                    @Override
                    public void uploadProgress(Progress progress) {
                        //ui线程　文件上传过程回调，只有请求方式包含请求体才会回调
                    }

                    @Override
                    public void downloadProgress(Progress progress) {
                        //ui线程　文件下载过程回调
                    }

                    @Override
                    public String convertResponse(okhttp3.Response response) throws Throwable {
                        //子线程，可以做耗时操作
                        //根据传递进来的response 对象，把数据解析成需要的 类型并返回
                        //根据自己的需要抛出异常，在onerror中处理
                        String sss = "";
                        if (TextUtils.isEmpty(sss)) {
                            throw new NullPointerException(" sss is null");
                        }
                        return sss;
                    }
                });
    }

//    public static void sendHttpString(String url, String tag, Map<>){
//        HttpParams params = new HttpParams();
//        params.put();
//        OkGo.< String>post(url)
//                .tag(tag)
//                .params()
//    }

}
